<?php
/**
 * model
 * @author Jinke  mejinke@gmail.com
 * 2010-01-08
 *
 */
class Comment_Model extends Model{

	public function __construct(){
		$this->_dbName = Dbtool::getDBName('main');
		$this->_table = 'comments';
		parent::__construct($this);
	}

	/**
	 * 根据ID获取分享的评论资料
	 * @param int $id ID
	 * @param bool $items 是否同时获取评论项?
	 * @return mixed 用户资料数据或 false
	 */
	public function getById($id,$items=true){
		if (empty($id)) return false;
		if ($tep = $this->where(array('id'=>$id))->getOne()){
			if ($items){
				$mod_item = M('comment.item');
				$tep['items']=$mod_item->getAllByComId($id);
			}
			return $tep;
		}
		return false;
	}

	/**
	 * 分享新的评论
	 * @param array $data 评论资料数组  $data['items']为评论项
	 */
	public function create(Array $data){
		$mod_user = M('user.user');
		$mod_source = M('comment.source');
		//用户是否存在
		if($user = $mod_user->getById($data['uid'])){
			//标题是否存在
			if($this->titleIsExists($data['title']))
				return 'titleExists';

			//来源是否存在
			$sid=0;
			if ($source=$mod_source->getByUrl($data['url'])){
				//设置评论的来源资料
				$sid=$source['id'];
				$data['sname']=$source['name'];
			}else{
				//创建新的来源
				$sname = getShareUrlSource($data['url']);
				if(empty($sname))
					return'urlError';
				$sid=$mod_source->create($user['id'],$sname,$data['url']);
				$data['sname']=$sname;
			}
			$data['sid']=$sid;
			$data['addtime'] = time();
			if($comid=$this->insert($data)){
				//更新来源的评论数量
				$mod_source->addCount($sid);

				//更新用户的贡献值及分享数
				$mod_user->addDevote($data['uid']);
				$mod_user->addComCount($data['uid']);

				//更新用户该领域的贡献数
				$mod_sp = M('user.sphere');
				$mod_sp->addDevoteCount($data['uid'],$sid);

				//添加具体评论项
				$mod_item = M('comment.item');
				$mod_item->create($comid,$data['items']);
				return true;
			}else
				return false;

		}else
			return'notFindUser';
	}


	/**
	 * 评论标题是否已存在
	 * @param string $title 标题
	 * @return bool  存在返回true
	 */
	public function titleIsExists($title){
		if (empty($title)) return true;
		if ($this->where(array('title'=>$title))->getOne())
			return true;
		return false;
	}

	/**
	 * 删除分享的评论
	 * @param array $ids id数组
	 * @param int $uid 是否指定的用户才可删除 默认false 不指定
	 * @return bool
	 */
	public function del(Array $ids,$uid=false){
		if ($uid)
			$result = $this->where(array('uid'=>$uid))->in('id',$ids)->select();
		else
			$result = $this->in('id',$ids)->select();

		$mod_item = M('comment.item');
		$mod_source = M('comment.source');
		$mod_user = M('user.user');
		$mod_sp = M('user.sphere');
		for($i=0;$i<count($result);$i++){
			//更新来源的评论数量
			$mod_source->lessenCount($result[$i]['sid']);

			//更新用户的贡献值及分享数
			$mod_user->lessenDevote($result[$i]['uid']);
			$mod_user->lessenComCount($result[$i]['uid']);

			//更新用户该领域的贡献数
			$mod_sp->lessenDevoteCount($result[$i]['uid'],$result[$i]['sid']);
		}
		if ($uid)
			$result = $this->where(array('uid'=>$uid))->in('id',$ids)->remove();
		else
			$result = $this->in('id',$ids)->remove();
		if($result)
			return $mod_item->del($ids);

		return false;
	}


	/**
	 * 增加分享的评论鲜花数量
	 * @param int $id 分享的评论ID
	 * @param int $num 增加的数量
	 */
	public function addFlowerCount($id,$num=1){
		return $this->where(array('id'=>$id))->autoAdd('flower',$num);
	}

	/**
	 * 减少分享的评论鲜花数量
	 * @param int $id 分享的评论ID
	 * @param int $num 减少的数量
	 */
	public function lessenFlowerCount($id,$num=1){
		return $this->where(array('id'=>$id))->autoLessen('flower',$num);
	}

	/**
	 * 增加分享的评论鸡蛋数量
	 * @param int $id 分享的评论ID
	 * @param int $num 增加的数量
	 */
	public function addEggCount($id,$num=1){
		return $this->where(array('id'=>$id))->autoAdd('egg',$num);
	}

	/**
	 * 减少分享的评论鸡蛋数量
	 * @param int $id 分享的评论ID
	 * @param int $num 减少的数量
	 */
	public function lessenEggCount($id,$num=1){
		return $this->where(array('id'=>$id))->autoLessen('egg',$num);
	}


}
?>